package com.literaryfamily.literaryfamily.service.book;

import com.literaryfamily.literaryfamily.entity.Book;
import com.literaryfamily.literaryfamily.model.ReturnResult;
import com.literaryfamily.literaryfamily.myUtil.PageUtil;

import java.util.List;

/**
 * 搜索接口,暂时不考虑添加清空搜索记录的功能
 * 所有涉及读写的方法都需要抛出 WriteError 数据库读写错误异常(这个是运行时异常,只需要抛出不需要处理)
 * 此接口所有方法均不检查用户身份,应该验证身份后在进行检查
 *
 * @author 滑稽/因果报应
 */
public interface SearchService {
    /**
     * 搜索书籍
     *
     * @param usesId   搜索的用户,传入是为了方便记录日志信息
     * @param bookName 搜索的名称
     * @param tag      勾选的书籍标签的集合
     * @param pageMsg  分页信息,为空时代表不进行分页,获取所有记录
     * @return 搜索到的书籍
     */
    List<Book> searchBook(Long usesId, String bookName, List<Integer> tag, PageUtil pageMsg);

    /**
     * 高级检索
     *
     * @param usesId  检索用户ID
     * @param bookMsg 打包过的检索信息
     * @param tag     包含的标签
     * @param pageMsg 分页信息,为空时代表不进行分页,获取所有记录
     * @return 搜索结果
     */
    ReturnResult<Book> searchBook(Long usesId, Book bookMsg, List<Integer> tag, PageUtil pageMsg);

    /**
     * 获取搜索记录
     *
     * @param usesId 用户ID
     * @param size   获取最近的条数,默认为5
     * @return 记录信息
     */
    ReturnResult<Book> searchBookHistory(Long usesId, int size);

}